package team.nine.kuaichezuche.service;

import team.nine.kuaichezuche.model.User;

/**
 * 用户服务接口，定义用户相关的业务方法
 */
public interface UserService {
    
    /**
     * 用户注册
     * @param user 用户对象，包含注册所需信息
     * @return 注册成功的用户对象
     * @throws Exception 如果注册失败抛出异常
     */
    User register(User user) throws Exception;
    
    /**
     * 用户注册（替代方法名）
     * @param user 用户对象，包含注册所需信息
     * @return 注册成功的用户对象
     * @throws Exception 如果注册失败抛出异常
     */
    default User registerUser(User user) throws Exception {
        return register(user);
    }
    
    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户对象，如果不存在则返回null
     */
    User getUserByUsername(String username);
    
    /**
     * 根据手机号获取用户信息
     * @param phone 手机号
     * @return 用户对象，如果不存在则返回null
     */
    User getUserByPhone(String phone);
    
    /**
     * 生成用户令牌
     * @param userId 用户ID
     * @return 生成的令牌字符串
     */
    String generateToken(Long userId);
    
    /**
     * 用户登录
     * @param phoneNumber 手机号
     * @param password 密码
     * @return 登录成功的用户对象
     * @throws Exception 如果登录失败抛出异常
     */
    User login(String phoneNumber, String password) throws Exception;
    
    /**
     * 根据令牌获取用户信息
     * @param token 认证令牌
     * @return 用户对象
     * @throws Exception 如果令牌无效抛出异常
     */
    User getUserByToken(String token) throws Exception;
    
    /**
     * 更改用户密码
     * @param phoneNumber 手机号
     * @param verificationCode 验证码
     * @param newPassword 新密码
     * @return 更改密码后的用户对象
     * @throws Exception 如果更改密码失败抛出异常
     */
    User changePassword(String phoneNumber, String verificationCode, String newPassword) throws Exception;
}